var express = require('express');
var fs = require('fs');
var url = require('url');
var app = express();
//引入mongodb模块，获得客户端对象
var MongoClient = require('mongodb').MongoClient;
//连接字符串
var DB_CONN_STR = 'mongodb://localhost:27017/onePersonal';

//设置跨域访问
app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By", ' 3.2.1');
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
});

//修改用户头像
app.post('/updateper', function(req, res) {
  //以文件流的形式接受提交的数据
  var data = '';
  req.on('data', function(chunk) {
    // var obj=qs.parse(chunk.toString());
    data += chunk;
    console.log('数据读取中');
  });
  //当文件流读取完毕时，会触发end事件，在end事件中就可以确保数据是完整的
  req.on('end', function() {
    console.log('数据读取完毕');
    // console.log(data.toString());

    var tt=JSON.parse(data.toString());

    function dataps() {};
    var dataps = new dataps();
    dataps.username = tt.username;
    dataps.userid =tt.userid;
    dataps.userphoto = tt.userphoto;
    dataps.perbackimg = tt.userbackimg;

    // console.log(JSON.parse(tt));
    // console.log(dataps);
    MongoClient.connect(DB_CONN_STR, dataps, function(err, db) {
      console.log("连接成功！");
      // console.log('登录');
      //执行插入数据操作，调用自定义方法
      updatePhoto(db, dataps, function(result) {
        //关闭数据库
        db.close();
        db.close();
        if (result == '') {
          res.send('{"code":0,"res":"修改失败"}');
        } else {
          res.send(result);
        }
      });
    });
  });
});

//头像修改
var updatePhoto = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  var where = {
    userid: datas.userid
  };
  //要修改的结果
  var set = {
    $set: {
      username: datas.username,
      userphoto:datas.userphoto,
      perbackimg:datas.perbackimg
    }
  };
  collection.updateMany(where, set, function(err, result) {
    //如果存在错误
    if (err) {
      console.log('Error:' + err);
      return;
    }
    //调用传入的回调方法，将操作结果返回
    callback(result);
  });
}

//修改小记
app.post('/xiumess',function(req, res){
  var data = '';
  console.log('修改');
  req.on('data', function(chunk) {
    // var obj=qs.parse(chunk.toString());
    data += chunk;
    console.log('数据读取中');
  });

  req.on('end', function() {
    console.log('数据读取完毕');
    // console.log('2323234');
    console.log(data.toString());

    var tt=JSON.parse(data.toString());

    function dataps() {};
    var dataps = new dataps();
    dataps.userids =tt.userid;
    dataps.xiaomess = tt.xiaomess;
    dataps._id=tt._id;

    MongoClient.connect(DB_CONN_STR, dataps, function(err, db) {
      console.log("连接成功！");
      updateMess(db, dataps, function(result) {
        db.close();
        if (result == '') {
          res.send('{"code":0,"res":"修改失败"}');
        } else {
          console.log(result);
          res.send(result);
        }
      });
    });
  });
})

//修改小记
var updateMess = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  console.log(datas);
  console.log(datas._id);
  var where = {
    _id:datas._id
  };
  //要修改的结果
  var set = {
    $set: {
      xiaomess: datas.xiaomess
    }
  };
  collection.updateMany(where, set, function(err, result) {
    //如果存在错误
    if (err) {
      console.log('Error:' + err);
      return;
    }
    //调用传入的回调方法，将操作结果返回
    callback(result);
  });
}

//添加小记
app.post('/addmess',function(req, res){
  var data = '';
  console.log('添加');
  req.on('data', function(chunk) {
    // var obj=qs.parse(chunk.toString());
    data += chunk;
    console.log('数据读取中');
  });

  req.on('end', function() {
    console.log('数据读取完毕');
    console.log('2323234');
    console.log(data.toString());

    var tt=JSON.parse(data.toString());

    function dataps() {};
    var dataps = new dataps();
    dataps.userids =tt.userid;
    dataps.xiaomess = tt.xiaomess;

    MongoClient.connect(DB_CONN_STR, dataps, function(err, db) {
      console.log("连接成功！");
      insertMess(db, dataps, function(result) {
        db.close();
        if (result == '') {
          res.send('{"code":0,"res":"修改失败"}');
        } else {
          res.send(result);
        }
      });
    });
  });
})

//添加小记
var insertMess = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  //插入数据
  collection.insert(datas, function(err, result) {
    if (err) {
      console.log('error:' + err);
      return;
    }
    callback(result);
  });
}

//查找小记
app.get('/mess', function(req, res) {
  var urlObj = url.parse(req.url, true);
  var userid=urlObj.query.userid;
  console.log(userid);
  MongoClient.connect(DB_CONN_STR, userid, function(err, db) {
    console.log("连接成功！");
    console.log('chazhao1234');
    //执行插入数据操作，调用自定义方法
    findXiao(db, userid, function(result) {
      db.close();
      if (result == '') {
        res.send('{"code":0,"res":"该用户不存在"}');
      } else {
        res.send(result);
      }
    });
  });
})

//查找小记
var findXiao = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  var where = {
    userids: datas
  }; //查询指定用户名
  //要显示的字段
  var set = {
    userids: 1,
    xiaomess: 1
  };
  collection.find(where, set).toArray(function(err, result) {
    //如果存在错误
    if (err) {
      console.log('Error:' + err);
      return;
    }
    //调用传入的回调方法，将操作结果返回
    callback(result);
  });
}

app.get('*', function(req, res) {
  //判断要请求的接口，文件是否存在
  var bol = fs.existsSync('.' + req.path);
  // console.log(req.path);
  var urlObj = url.parse(req.url, true);
  console.log(urlObj);
  //获取前台传过来的路径，通过判断路径来判断是什么操作
  var forPath = req.path;
  console.log(forPath);
  if (forPath == '/login') {
    //登录操作
    //获取输入的用户名
    var uname = urlObj.query.usname;
    //获取输入的密码
    var upassword = urlObj.query.password;
    MongoClient.connect(DB_CONN_STR, uname, function(err, db) {
      console.log("连接成功！");
      console.log('登录');
      //执行插入数据操作，调用自定义方法
      findData(db, uname, function(result) {
        //显示结果
        // console.log('111');
        // console.log(result);
        //关闭数据库
        db.close();
        if (result == '') {
          res.send('{"code":0,"res":"该用户不存在"}');
        } else if (upassword == result[0].password) {
          res.send(result);
        } else {
          res.send('{"code":0,"res":"用户密码错误"}');
        }

      });
    });
  } else if (forPath == '/search') {
    //找回密码
    console.log('密码找回');

    var userid = urlObj.query.seid;
    var password = urlObj.query.sepassword;
    var email = urlObj.query.reemail;

    function dat() {};
    var datas = new dat();
    datas.userid = userid;
    datas.password = password;
    datas.email = email;

    MongoClient.connect(DB_CONN_STR, userid, function(err, db) {
      console.log("连接成功！");
      console.log('登录');
      //执行插入数据操作，调用自定义方法
      findData(db, userid, function(result) {
        //显示结果
        console.log(result);
        if (result == '') {
          //关闭数据库
          db.close();
          res.send('{"code":0,"res":"该用户不存在"}');
        } else if (email == result[0].email) {
          MongoClient.connect(DB_CONN_STR, datas, function(err, db) {
            console.log("连接成功！");
            //执行插入数据操作，调用自定义方法
            updateData(db, datas, function(result) {
              //显示结果
              console.log(result);
              //关闭数据库
              db.close();
              if (result == '') {
                res.send('{"code":0,"res":"修改失败"}');
              } else {
                res.send('{"code":1,"res":"修改成功"}');
              }

            });
          });
        } else {
          //关闭数据库
          db.close();
          res.send('{"code":0,"res":"密码修改失败，请检查邮箱是否填写正确"}');
        }
      });
    });

  } else if (forPath == '/regin') {

    console.log('注册');

    var username = urlObj.query.rename;
    var userid = urlObj.query.reid;
    var password = urlObj.query.repassword;
    var email = urlObj.query.reemail;

    function dat() {};
    var datas = new dat();
    datas.username = username;
    datas.userid = userid;
    datas.password = password;
    datas.email = email;
    datas.userphoto = '../../static/img/touxiang.jpg';
    datas.perbackimg = '../../static/img/loginback.jpg';

    MongoClient.connect(DB_CONN_STR, userid, function(err, db) {
      console.log("连接成功！");
      console.log('登录');
      //执行插入数据操作，调用自定义方法
      findData(db, userid, function(result) {
        //显示结果
        console.log(result);

        if (result == '') {
          MongoClient.connect(DB_CONN_STR, datas, function(err, db) {
            console.log("连接成功！");
            //执行插入数据操作，调用自定义方法
            insertData(db, datas, function(result) {
              //显示结果
              //关闭数据库
              db.close();
              if (result.result.ok == '1') {
                console.log(result);
                res.send('{"code":1,"res":"注册成功"}');
              } else {
                //关闭数据库
                db.close();
                res.send('{"code":0,"res":"注册失败"}');
              }

            });
          });
        } else {
          res.send('{"code":0,"res":"该用户已经存在"}');
        }

      });
    });
  } else {
    res.send('{"code":0,"res":"该操作暂不可用"}');
  }


});

//监听端口号
app.listen(8888, function() {
  console.log('启动成功！');
});

//数据插入
var insertData = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  //插入数据
  collection.insert(datas, function(err, result) {
    if (err) {
      console.log('error:' + err);
      return;
    }
    callback(result);
  });
}

//数据查找
var findData = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  var where = {
    userid: datas
  }; //查询指定用户名
  //要显示的字段
  var set = {
    userid: 1,
    password: 1,
    email: 1,
    username: 1,
    userphoto: 1,
    perbackimg: 1,
  };
  collection.find(where, set).toArray(function(err, result) {
    //如果存在错误
    if (err) {
      console.log('Error:' + err);
      return;
    }
    //调用传入的回调方法，将操作结果返回
    callback(result);
  });
}

//密码修改
var updateData = function(db, datas, callback) {
  //获得指定的集合
  var collection = db.collection('users');
  var where = {
    userid: datas.userid
  };
  //要修改的结果
  var set = {
    $set: {
      password: datas.password
    }
  };
  collection.updateMany(where, set, function(err, result) {
    //如果存在错误
    if (err) {
      console.log('Error:' + err);
      return;
    }
    //调用传入的回调方法，将操作结果返回
    callback(result);
  });
}

//使用客户端连接数据，并指定完成时的回调方法
// MongoClient.connect(DB_CONN_STR, function(err, db) {
//     console.log("连接成功！");
//     //执行插入数据操作，调用自定义方法
//     findData(db, function(result) {
//         //显示结果
//         console.log(result);
//         //关闭数据库
//         db.close();
//     });
// });
